Method for hybrid rasterization and raytracing with consistent programmable shading

ABSTRACT

A method of generating a computer image wherein secondary raytrace vectors are calculated for the image after the image is rendered using rasterization. The secondary raytrace vectors are based on virtual camera angles that are stored during the rasterization process. The raytrace vectors can be calculated using the same processor as the rasterization, thereby providing greater consistency in the image. A metaprogrammed shader can also be applied to the generated image, wherein the shader uses the same processor as the raytrace and rasterization steps. The metaprogrammed shader allows the shader algorithm to be segmented for streamlined processing by the processor.

FIELD OF THE INVENTION

The present invention relates to the field of computer-generatedvisualizations, and more specifically provides a method for efficientlyrendering consistently shaded visualizations.

BACKGROUND OF THE INVENTION

Most computer graphics today use rasterization or raytracing to generateimages. Rasterization and raytracing are two fundamentally differentgraphics techniques. In rasterization, all the modelling primitives usedto describe the scene are projected towards the display, and the pixelscovered by each primitive are determined. A per-pixel depth test is thenapplied to determine which primitive is visible in each pixel. Thisprocess is described in more detail by Tomas Akenine-Möller and EricHaines, Real-Time Rendering, (2nd Ed., 2002). The second, raytracing,works backwards from the display. In raytracing, the modeling primitivethat is visible in each pixel is determined by shooting rays into thescene. This process is described in more detail by Andrew S. Glassner,Introduction to Raytracing (1989), and Matt Pharr and Greg Humphreys,Physically Based Rendering (2005).

Rasterization, currently the most widespread method for the display ofinteractive 3D content, is supported by hardware acceleration.Rasterization uses polygons as modelling primitives, and each object inthe display is drawn on a polygon by polygon basis. Each polygonconsists of a sequence of vertices, with shader attributes attached toeach vertex. Each polygon is projected into the device coordinate systemand the depth z(x,y) and colour c(x,y) of all points (x,y) inside eachpolygon are calculated from the depth and shader attributes at thevertices. To compute the colour c(x,y) of a point (x,y) on a polygon, aninterpolation first over each polygon edge and a second interpolationover the row from the left to the right edge of the polygon, or someother equivalent method for interpolating attributes between vertices,is used. A shader program is then invoked to compute a colour for eachpoint from the interpolated vertex attributes.

Each sampled point is called a fragment, and is written to an array ofcolour values called the frame buffer. Each value in the colour valuearray corresponds to a pixel on the screen. As color values arecalculated and added to the array, only the colour due to the fragmentclosest to the eye (also referred to as the fragment having the minimumdepth) is typically retained. This is accomplished by using a secondarray in which the depth associated with each pixel is stored. As a newcolour value is calculated for a fragment, the depth of that fragment iscompared to the depth associated with a given pixel. Only fragments withdepths smaller than those currently in the frame buffer are allowed toupdate the colour and depth buffers.

Because rasterization is able to draw near real-time frames through itsleveraging of specialized hardware devices, known as graphics processingunits or GPU's, many programmers prefer to use rasterization indynamically generated scenes. However, rasterization has severaldisadvantages. One such disadvantage is rasterization tends to producehighly local effects. That is, effects which extend beyond the contextof the current polygon or pixel are difficult or impossible to computeaccurately. Such effects include reflections, refractions, and indirect(global) illumination. Thus, rasterization is not as effective forgenerating realistic effects in some simulated environments.

More specifically, rasterization assumes an image formation process thatmaps straight lines in the scene to straight lines on the display. Thisis mathematically equivalent to stating that rasterization assumes thatthe projection from scene points to image points is along a set of rayswhich all pass through a common point. However, images formed byreflections and refractions due to curved objects, for example, do notmap straight lines in the scene to straight lines in the image. Indirectillumination algorithms, in turn, may require the transport ofinformation over many divergent paths that do not pass through a commonpoint and so cannot be interpreted as a polygon rasterization. This isdescribed in more detail in Philip Dutré et al., Advanced GlobalIllumination (2003). As a result of these shortcomings, the scenesgenerated by rasterization tend to look less realistic than is typicallydesired.

Modern graphics hardware also supports programmable shader programs.Shader programs can be invoked per fragment to convert interpolatedattributes to pixel colours, as described above, or per-vertex, tosupport programmable projection. Graphics hardware that supports shaderstypically includes a plurality of very high performance floating-pointarithmetic units that allow near-simultaneous shading of many fragmentsor vertices. Such parallel shading techniques typically involve havingall shaders execute the same instruction at once, in asingle-instruction multiple-data (SIMD) mode of execution. Thisdata-parallel computational model leads to high performance andefficient use of computational resources, but does not easily supportefficient data-dependent control flow (iteration and conditionalexecution dependent on computed values). Nevertheless, shaders areimportant in high-quality rendering since they are used to simulateaccurate material properties. Shaders can also read interpolated datafrom external arrays called texture maps. Texture maps are usually usedto store images that are then pasted on surfaces, but they can be usedfor many other purposes, such as storage of data structures.

Raytracing is an alternative algorithm for image generation, and isdescribed in more detail by Andrew S. Glassner, Introduction toRaytracing (1989), and Matt Pharr and Greg Humphreys, Physically BasedRendering (2005). To create an image with raytracing, for every pixel tobe displayed, at least one ray is sent and followed from a virtual eyepoint through the pixel. The colour values of the objects hit by theappropriate ray are calculated by interpolating attributes betweenvertices and then invoking a shader. The result is used to determine thecolours of the respective pixel.

To calculate a reflection or refraction, a new “secondary” ray isgenerated from the intersected surface point, and the ray tracingalgorithm is called recursively. However, it should be noted thatsecondary rays generated from curved surfaces may not meet at a commoneye point. Generally, ray tracing is much more flexible thanrasterization since each ray is characterized separately with a startpoint and a direction. For example, for indirect illumination, we mayjust want to trace a set of rays to transfer information throughout ascene without an explicit image formation process. Raytracing can alsoeasily be used to calculate accurate soft shadows, depth of field due tolens systems, glossy reflections, and other effects difficult orimpossible to implement with rasterization. This is described in moredetail by Robert L. Cook et al, Distributed Ray Tracing, in Proceedingsof ACM SIGGRAPH 137-145 (1984), which is incorporated herein byreference in its entirety.

The fundamental operation required by raytracing is the intersection ofa ray with the polygons in the scene. This is implemented by finding thefirst intersection point along the ray from its origin point with aspecific polygon. Raytracing intersection calculations are very timeintensive, since any ray might intersect any polygon in the scene. Thus,raytracing is mostly used for the generation of images where quality isthe principal factor. Existing attempts at interactive ray tracing usemultiple processors in massive clusters, but still do not evenapproximate the speed and efficiency of rasterization.

SUMMARY OF THE INVENTION

Currently, users of real-time visualization and graphics systems, suchas, without limitation, virtual prototyping systems, consumer videogames, commercial flight simulators, and military combat simulators,demand the very high performance typically associated withrasterization, and the global effects, especially in terms ofreflections and refractions, typically associated with raytracing. Atthe same time, they want the accurate and programmable materialproperties provided by shaders. A hybrid method that uses mainlyrasterization but invokes raytracing when necessary would address theneeds of many practical applications. It is desirable that such a methoddoes not show a visible difference between image parts rendered usingdifferent methods. For example, the objects visible in reflections,which are traditionally computed using raytracing, should have the samesurface properties when computed with programmable shaders as thosevisible directly (i.e. computed with rasterization).

Accordingly, the present invention is directed to a method of hybridrasterization and raytracing with consistent programmable shading thatsubstantially obviates one or more of the problems due to limitationsand disadvantages of the related art. Additional features and advantagesof the invention will be set forth in the description which follows, andin part will be apparent from the description, or may be learned bypractice of the invention.

The hybrid method described herein allows more consistent evaluation ofpixel properties (e.g. color, brightness, depth) because therasterization and raytracing steps use the same shaders. This is incontrast to the prior art, in which different shaders are used forrasterization and ray tracing. In such prior art, even where care istaken to utilize similar algorithms, the pixel properties are notconsistently evaluated because a rasterization shader is usuallyexecuted by the GPU (Graphical Processor Unit), whereas a ray tracingshader is usually executed by the CPU (Central Processing Unit). Theresulting pixel property differences are simply due to the differentprocessors using slightly different calculation techniques. Thesedifferent calculation techniques may result in calculation results thatare similar out to the tenth to fifteenth position after decimal point,but even such slight calculation differences can cause visibledifferences in color, brightness, and the like. Therefore, it is anobject of the invention to use the Graphics Processing Unit (“GPU”) forboth shading in both raytracing and rasterization since the GPU hardwareis optimized for corresponding image processing methods and is thereforemuch faster than a normal CPU.

The hybrid method described herein also allows more consistentevaluation of pixel properties because, in one embodiment, theraytracing step occurs subsequent to an initial rasterization of theimage. In a typical raytraced image, an incoming ray may intersect witha polygon at a point that is between to pixels. A secondary ray spawnedfrom that intermediate position can have properties different from thosespawned from a pixel location. By rasterizing the image first, and thenspawning secondary rays from the pixel locations, a more consistentimage can be created. Thus, it is an object of the invention to spawnsecondary rays from pixel locations in a rasterized image.

It is another object of the method described herein is to accuratelyevaluate and render reflections, including interfering reflections, inwindshields, side windows, and the like.

It is still another object to properly calculate the visualization ofvehicle headlights and other lamps.

The objectives and other advantages of the invention will be realizedand attained by the structure particularly pointed out in the writtendescription and claims hereof as well as the appended drawings.

The method described in this application offers a solution that combinesthe efficiency of rasterization with the correctness of raytracing. Itcan use the same hardware mechanism and shader programs to achieve thedesired effect. Also disclosed is a new approach to efficientlycomputing raytraced intersections on hardware traditionally used forrasterization. The hybridization technique used here could be used inconjunction with any raytracer algorithm, including others that run ongraphics accelerators such as those described in Timothy J. Purcell etal., Ray Tracing on Programmable Graphics Hardware, in Proceedings ofACM SIGGRAPH, 703-712 (2002) and Tim Foley, Jeremy Sugerman, KD-TreeAcceleration Structures for a GPU Raytracer, in Proceedings of ACMSIGGRAPH/Eurographics Graphics Hardware (2005), which are incorporatedherein by reference in their entirety. Many other applications are alsopossible, including, without limitation, whenever efficient but accurateglobal illumination effects are desired in combination with programmableshaders.

Also utilized herein is a metaprogramming dynamic shader compilationsystem similar to that described in Michael McCool, et al.,Metaprogramming Shaders, in Proceedings of ACM SIGGRAPH/EurographicsGraphics Hardware, 57-68 (2002), which is incorporated herein byreference in its entirety. This system is used to combine shaders with araytracing framework to implement the method.

Transformation of the shader program inputs and outputs is advantageouswhen implementing the method described below. The dynamic shadercompilation system, which also natively supports generativemetaprogramming, can facilitate such transformations.

In a metaprogrammed shader programming system, sequences of operationsare recorded in a data structure referred to as an intermediaterepresentation. This is described in Michael McCool, et al., ShaderAlgebra, in Proceedings of ACM SIGGRAPH (ACM Transactions on Graphics23(3)) 787-795 (2004), which is incorporated herein by reference in itsentirety. A dynamic compiler can then transform and combine programsrepresented in this data structure before mapping them to a particulartarget. Shader programs may be generated on the fly to implement araytracing algorithm and combine it with preexisting shaders usingshader algebra operators.

A metaprogramming toolkit, referred to herein as Sh, includes anembedded parser that permits the specification of programs using ahigh-level language syntax directly inside the interface of a C++library. Sh permits dynamic generation (generative metaprogramming) ofSh programs by the host application program. Sh may include a compilercomponent that dynamically transforms user-specified computations asnecessary and prepares and optimizes them for running on an arbitrarytarget processor. Sh can also include a modular backend system that mapsan internal representation of desired computations to concrete programssuitable for execution on a given target processor using a specifictarget language or interface. In one embodiment, backend modules areprovided in the Sh distribution for both the host CPU (enabling dynamicgeneration of code for the host CPU) and multiple GPUs. Sh also includesa data-management component that enables the management of textures andparameters using the object-oriented programming features of C++. The Shsystem is modular and permits the addition of new language features andnew compilation targets by the user.

Although this specification focuses on the use of the Sh system, itshould be apparent to one skilled in the art that any metaprogrammingsystem with similar capabilities may be substituted therefor withoutdeparting from the spirit or the scope of the invention.

It is to be understood that both the foregoing general description andthe following detailed description are exemplary and explanatory and areintended to provide further explanation of the invention as claimed.

BRIEF DESCRIPTION OF THE DRAWINGS

The accompanying drawings, which are included to provide a furtherunderstanding of the invention and are incorporated in and constitute apart of this specification, illustrate embodiments of the invention andtogether with the description serve to explain the principles of atleast one embodiment of the invention.

In the drawings:

FIG. 1 is a block diagram illustrating a hybrid rasterization andraytracing image generation method.

FIG. 2 is a block diagram illustrating an alternative hybridrasterization and raytracing image generation method.

DETAILED DESCRIPTION OF AN EMBODIMENT

Reference will now be made in detail to the preferred embodiments of thepresent invention, examples of which are illustrated in the accompanyingdrawings.

As described above, if only planar surfaces are to be considered, allrays (primary as well as secondary) can be seen as originating from onepoint, that of the virtual camera. Such an image could easily begenerated using rasterization. However, if reflections, refractions, orother such optical distortions exist in the scene, such as, withoutlimitation, those naturally occurring on curved surfaces such as vehiclewindshields, all secondary rays originate from different points and itis therefore necessary to handle these rays separately using raytracing.

In one embodiment, only selected surfaces where ray tracing effects(e.g. reflections or refraction) are apparent are rendered using raytracing, with other parts of the image rendered using rasterization.More specifically, only secondary rays (those reflected or refracted offsurfaces, or otherwise not meeting at a common origin) need to beraytraced. In one embodiment, to cast rays from rasterized surfaces, theworld-space position of polygons being rasterized are interpolated fromvertex attributes, and if these polygons are reflective or refractive, aper-fragment shader is invoked that implements a ray tracing algorithmfor secondary rays instead of the normal surface shader. The actual raytracing method is implemented on the same hardware used forrasterization, by exploiting the high-performance computationalabilities of shaders.

In the embodiment illustrated in FIG. 1, a hybrid image generationmethod begins with the automatic evaluation of the image to be generatedto determine which pixels contain polygon vertices that includereflective and/or refractive surfaces (Block 100). The image is thengenerated using rasterization (Block 110). As the rasterized image isgenerated, an array is created that contains a directional vector from avirtual camera that is associated with each polygon vertex (Block 120).The pixels containing polygon vertices that include reflective and/orrefractive surfaces are then evaluated (Block 130) to determine whetherthe reflective and/or refractive polygon vertices are in the foreground.For each such foreground polygon vertex, a secondary ray is generatedfrom the polygon vertex using the directional vector associated with thepolygon vertex (Block 140). A shader program is then invoked toaccurately render the remainder of the image (Block 150). The shaderinvocation may result in additional, recursive secondary ray generation.

For other applications of ray tracing, for instance indirectillumination, glossy reflection, or soft shadows, rays may be spawned indifferent ways. However, the same approach can be taken: a shader can bewritten that computes the start point and direction of each ray, and itis only necessary to invoke the raytracer when rasterization cannot beused.

The ray tracer itself can be seen as a shader program, but when the rayhits other surfaces, a shader particular to that surface can be invokedto compute its colour. The computed colour of an object seen in areflection (and rendered with ray tracing) should be consistent with thecolour of the object when viewed directly (and rendered withrasterization), except for possible coloring effects from the reflectingobject. It is advantageous for raytracing and rasterization to use thesame shader programs to compute consistent colours, although theraytracing and rasterization algorithms may invoke the shader programsin different ways. For example, shader programs invoked directly by therasterizer can use input parameters interpolated from vertices, whereasshader programs invoked by the raytracer will typically read theirparameters from values interpolated by the raytracer algorithm fromscene data stored in texture maps.

The two modes of shader usage can be integrated through the use ofgenerative metaprogramming (the use of one program to generate ormanipulate another). The raytracer is implemented as a framework, whichimplements the core algorithm but which is parameterized with a set ofshader programs. For each particular scene, all the shader programs forthat scene can be transformed to read from the scene data structurerather than from interpolated vertex attributes, and can be combinedwith the raytracer framework. The framework can then generate a customraytracing shader specific to that scene. Transformation of shaderprograms can be done by a compiler that explicitly transforms anintermediate representation of the shader programs, such as Sh(described above), or by any other system with similar capabilities.

The combination of the raytracer and the shaders results in a singleshader program which can both raytrace the scene and shade theintersection points. This master shader program can be used duringrasterization to add raytraced effects to particular surfaces. Therelevant scene geometry can also be stored in texture maps for access bythis master shader.

A metaprogramming compiler can also take very complex shader programsand break them into multiple parts, with each of the parts capable ofbeing rendered over multiple passes. This process is referred to asvirtualization, and is described in more detail in [Chan 2002, Riffel2004, Foley 2004]. A metaprogramming compiler can also virtualizecontrol flow if necessary by converting it into multiple passes (ageneralization of the techniques presented by Timothy J. Purcell et al.,Ray Tracing on Programmable Graphics Hardware, in Proceedings of ACMSIGGRAPH, 703-712 (2002)). This is especially useful in this contextsince a scene with a large number of shaders will result in a very largemaster shader to raytrace that scene.

The master shader should also support conditional execution of surfaceshaders, so that only the code needed for the surface hit is invoked.Using the early occlusion test supported in graphics hardware, whichtests the depth before invoking a shader and omits shader invocation ifthe colour would not be written, and by breaking the shader intomultiple passes, the ray tracing of scenes with large numbers of shaderscan be efficiently implemented, even though the shader execution modelis data-parallel and does not natively support conditional execution.

It is advantageous to utilize a metaprogramming system because currentgeneration GPUs have some limitations. By way of example, withoutintending to limit the present invention, such limitations may includelimitations in the number of variables that can be calculated, thenumber of usable instructions is limited, and the available memory isrestricted. If the size of a shader is too big, the shader cannot beexecuted by the GPU. In the prior art, such shaders must be split insmaller pieces by hand. The metaprogramming system provides automaticshader segmentation. The shader itself may be written in a C-likeprogramming language and can be converted in an assembler program.During this conversion the automatic segmentation is so accomplishedthat the resulting assembler segments can be executed by the GPU.

As the image is rendered, the appropriate shader must be selected for agiven surface. The problem is that the master shader comprises allsurface shaders of the scene, and is thus too large to be able to beprocessed by the GPU. The master shader is shortened through a selectionof the shader to be rendered, wherein this selection is already made onthe side of the host application at the metalanguage level. Thus, themetalanguage can act as an optimizer.

In the embodiment illustrated in FIG. 1, the whole scene is rasterizedfirst, and the raytracing step is performed only for those polygonswhich are detected to be visible in the foreground and for which raytracing is detected to be necessary. FIG. 2 illustrates an alternativeapproach. In the embodiment illustrated in FIG. 2, the image informationis scanned and each polygon containing reflective and/or refractivematerial is identified (Block 200). Each polygon is then rasterized(Block 210) and, if the polygon has reflective and/or refractivematerial (Block 220) it is immediately raytraced (Block 250). A shaderis then executed (Block 240). This is repeated (Block 260) for eachpolygon until the scene is rendered. However, since this embodimentperforms raytracing for polygons which are not ultimately visible, theembodiment described above with respect to FIG. 1 is presentlypreferred.

While the invention has been described in detail and with reference tospecific embodiments thereof, it will be apparent to those skilled inthe art that various changes and modifications can be made thereinwithout departing from the spirit and scope thereof. Thus, it isintended that the present invention cover the modifications andvariations of this invention provided they come within the scope of theappended claims and their equivalents.

1. A method of rendering a computer image formed of a plurality of pixels, comprising: identifying a first set of pixels in the image that have properties for which raytracing is advantageous; rasterizing the image, wherein an array of direction vectors is created as part of the rasterizing, the array storing a direction vector from a virtual camera and associated with each polygon vertex in the image; identifying a second set of pixels, wherein the second set of pixels is comprised of those pixels in the first set of pixels which are also in the foreground of the image; and, spawning at least one secondary ray from the second set of pixels, wherein the at least one secondary ray is spawned based on the array of direction vectors.
 2. The method of claim 1, wherein the properties for which ray tracing is advantageous includes pixels containing reflective materials.
 3. The method of claim 1, wherein the properties for which ray tracing is advantageous includes pixels containing refractive materials.
 4. The method of claim 1, wherein the properties for which ray tracing is advantageous includes pixels containing reflective and refractive materials.
 5. The method of claim 1, further comprising applying a shader to the image.
 6. The method of claim 5, wherein the shader is applied using a Graphics Processing Unit.
 7. The method of claim 6, wherein a metaprogramming system is used to instruct the Graphics Processing Unit.
 8. The method of claim 7, wherein the metaprogramming system automatically segments the shader.
 9. The method of claim 7, wherein the metaprogramming system automatically segments the shader for a particular manufacturer's Graphics Processing Unit.
 10. The method of claim 5, wherein the rasterizing further comprises the use of at least one shader on any object in the scene, and wherein the at least one shader is applied to the at least one spawned secondary ray intersecting with said object in the scene.
 11. The method of claim 1, wherein the first set of pixels is automatically generated.
 12. A method of rendering a computer image formed of a plurality of pixels, comprising: determining a first set of pixels in the image that have properties for which ray tracing is advantageous; and for each polygon in the image, performing the following steps: rasterizing the polygon; determining whether the polygon has properties for which raytracing is advantageous and performing secondary raytracing from the polygon if raytracing is advantageous; and applying a shader to the polygon.
 13. The method of claim 12, wherein the properties for which ray tracing is advantageous includes pixels containing reflective materials.
 14. The method of claim 12, wherein the properties for which ray tracing is advantageous includes pixels containing refractive materials.
 15. The method of claim 12, wherein the properties for which ray tracing is advantageous includes pixels containing reflective and refractive materials.
 16. A method of shading a ray traced image, comprising generating a master shader, the master shader comprising relevant scene geometry; and segmenting the master shader using a metaprogramming system. 